home *** CD-ROM | disk | FTP | other *** search
- {
- > I wrote a computer Program that produces 8 bit 480 x 640 hi res images,
- > and I would like to know if anyone is familiar With a routine that can
- > print these images out on a Printer.
- > The preferable Printer For the task is a HP LaserJet II.
- >
- > I would like to be able to tell the LaserJet exactly which pixel dots
- > to print, and I don't mind if I have to give bit information to the
- > Printer line-by-line.
- >
-
- Below is some (old) code to make a screendump in Graphics mode, for
- both HP laser II and Epson. I haven't tested this For SVGA, but if
- you give MaxX and MaxY the right values, I can't see where it would
- go wrong.
-
- Jan Barendregt
- }
- Uses
- Graph,
- Dos,
- Printer;
-
- Const
- d = 'l';
-
- Var
- MaxX, MaxY : Integer;
-
- Procedure dump;
- Var
- ymax,
- bbyt,
- b2 : Byte;
- psf : File of Byte;
- regs : Registers;
-
- Procedure out(ch : Char);
- begin
- regs.ax := ord(ch);
- regs.dx := 0;
- intr($17, regs);
- end;
-
- Procedure hplaser;
- Var
- b,
- reg,
- kol : Word;
- begin
- assign(psf, 'lpt1');
- reWrite(psf);
- Write(lst, chr(27), 'E');
- Write(lst, chr(27), '*t100R', chr(27), '*r0A');
- For reg := 0 to maxx do
- begin
- Write(lst, chr(27), '*b', (maxy + 1) div 8, 'W');
- For kol := ((maxy + 1) div 8) - 1 downto 0 do
- begin
- bbyt := 0;
- For b := 0 to 7 do
- begin
- if getpixel(reg, kol * 8 + b) = 0 then
- b2 := 0
- else
- b2 := 1;
- bbyt := bbyt or (b2 shl b);
- end;
- out(chr(bbyt));
- end;
- end;
- Write(lst, chr(27), '*rB');
- Write(lst, chr(12));
- Write(lst, chr(27), 'E');
- close(psf);
- end;
-
- Procedure epson;
- Var
- k, j, i : Byte;
-
- Function xget(x, y : Integer) : Byte;
- begin
- regs.ah := $0D;
- regs.cx := x;
- regs.dx := y;
- intr(16, regs);
- xget := regs.al;
- end;
-
- begin
- out(chr($1B));
- out(chr($33));
- out(chr($18));
- out(chr($0D));
- out(chr($0A));
- For j := 0 to (maxy shr 3) do
- begin
- out(chr($1B));
- out(chr($4C));
- out(chr((maxx + 1) mod 256));
- out(chr((maxx + 1) div 256));
- For i := 0 to maxx do
- begin
- bbyt := 0;
- For k := 0 to 7 do
- if (xget(i, (j shl 3) + k) <> 0) then
- bbyt := bbyt or (128 shr k);
- out(chr(bbyt));
- end;
- out(chr(13));
- out(chr(10));
- end;
- end;
-
- begin
- MaxX := GetMaxX;
- MaxY := GetMaxY;
-
- if d = 'l' then
- hplaser
- else
- epson;
- end;
-
-
- Var
- Gd, Gm,
- Radius : Integer;
-
- begin
- Gd := Detect;
- InitGraph(Gd, Gm, 'e:\bp\bgi');
- For Radius := 1 to 5 do
- Circle(100, 100, Radius * 10);
- Readln;
- Dump;
- CloseGraph;
- end.